/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ve.usb.cep.actions;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.activation.*;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import ve.usb.cep.db.Session;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.HashMap;
import com.google.gson.Gson;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.commons.lang.StringUtils;

import ve.usb.cep.db.SelectObject;
import ve.usb.cep.util.sqlWhere;
import ve.usb.cep.db.domainObjects.Usuario;
import ve.usb.cep.db.domainObjects.Curso;
import ve.usb.cep.db.domainObjects.Oferta;
import ve.usb.cep.db.domainObjects.Seccion;
import ve.usb.cep.db.models.CursoModel;
import ve.usb.cep.db.models.OfertaModel;
import ve.usb.cep.db.models.SeccionModel;
import ve.usb.cep.db.modelExceptions.CursoException;
import ve.usb.cep.db.modelExceptions.OfertaException;
import ve.usb.cep.db.modelExceptions.SeccionException;
import ve.usb.cep.db.types.dias;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.Image;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Calendar;
/**
 *
 * @author Andras
 */
public class SeccionA extends ActionSupport{

    //Salida por texto
    protected String idoferta;
    protected String estudianteSeleccionado;
    protected String seccionCertificados;
    protected String seccionConstancias;
    protected String output;
    protected String error;
    protected HashMap err = new HashMap();

    @Override
    public String execute(){

        /*if (!"Administrador".equals(user().getRol())){
            error = "Sólo administradores pueden gestionar cursos";
            return ERROR;
        }*/
        ActionContext.getContext().getSession().put("idoferta",idoferta);
        return SUCCESS;
    }
	
       public String execute_p(){
        ActionContext.getContext().getSession().put("idoferta",idoferta);   
        try {
            //Usuario u = (Usuario) ActionContext.getContext().getSession().get("user");
            //if (u!=null) {
                /*if (!"Estudiante".equals(user().getRol())){
                    error = "Sólo estudiantes pueden ver el listado de ofertas para inscribir.";
                    return ERROR;
                }*/

                System.out.println("ANTES DEL CONNECTION!!!!!!!!!!!");
                Connection conn = Session.connection();
                ResultSet rs;
                PreparedStatement pstmt;
                pstmt = conn.prepareStatement("select * from usuario where rol = 'Profesor'");
                rs = pstmt.executeQuery();
                int idProfesor;
                String nombreProfesor;
                String apellidoProfesor;
                int cedulaProfesor;
                String profesores = "";
                int i = 0;
                while (rs.next()) {
                    idProfesor = rs.getInt("codigo");
                    nombreProfesor = rs.getString("nombre");
                    apellidoProfesor = rs.getString("apellido");
                    cedulaProfesor = rs.getInt("cedula");
                    if (i==0) {
                        profesores = ""+ idProfesor+":"+nombreProfesor+" "+apellidoProfesor+" "+cedulaProfesor;
                        i=1;
                    } else {
                        profesores = profesores+";"+idProfesor+":"+nombreProfesor+" "+apellidoProfesor+" "+cedulaProfesor;
                    }
                }
                System.out.println("**** Y LOS PROFESORES SON "+profesores);
                ActionContext.getContext().getSession().put("opcProfesores", profesores);
            //}
            return SUCCESS;
        } catch (SQLException ex) {
            Logger.getLogger(OfertaA.class.getName()).log(Level.SEVERE, null, ex);
            return ERROR;
        }
    }
       
    public void exportarpdf() throws DocumentException, FileNotFoundException, IOException {
        System.out.println("SI SE METIO EN LA FUNCION PARA EXPORTAR EL PDF");
        
        int rowCount = 0;
        String nombreCurso = null;
        String horario = null;
        String nombreProfesor = null;
        String periodo = null;
        String salon = null;
        int totalIngresos = 0;
        String[][] m = null;
        String hlistarinscritos = (String) ActionContext.getContext().getSession().get("idseccion");
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select count(*) from inscritos_seccion ins, usuario u where ins.codigo_estudiante = u.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            rowCount = rs.getInt(1);
            System.out.println("EL NUMERO DE ESTUDIANTES QUE HAY EN ESA SECCCION ES DE " + rowCount);
            pstmt = conn.prepareStatement("select u.*, voucher, monto from inscritos_seccion ins, usuario u, seccion s, pago p, inscripcion i where p.inscripcion = i.codigo and i.estudiante = u.codigo and i.oferta = s.codigo_oferta and ins.codigo_seccion = s.codigo and ins.codigo_estudiante = u.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            
            m = new String[rowCount][7];
            int numero = 0;
            while (rs.next()){
                int nro = numero + 1; 
                m[numero][0] = ""+nro;
                m[numero][1] = rs.getString("nombre") + " " + rs.getString("apellido");
                m[numero][2] = rs.getString("cedula");
                m[numero][3] = rs.getString("telefono");
                m[numero][4] = rs.getString("correo");
                m[numero][5] = rs.getString("voucher");
                m[numero][6] = rs.getString("monto");
                numero = numero + 1;
            }
            
            pstmt = conn.prepareStatement("select c.nombre, o.dias from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            horario = rs.getString("dias");
            
            pstmt = conn.prepareStatement("select p.nombre, p.apellido from seccion s, inscritos_seccion ins, usuario e, usuario p where ins.codigo_estudiante = e.codigo and ins.codigo_seccion = s.codigo and s.codigo_prof = p.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                nombreProfesor = "No Especificado";
            } else {
                nombreProfesor = rs.getString("nombre") + " " + rs.getString("apellido");
            }
            
            pstmt = conn.prepareStatement("select aula from seccion s, inscritos_seccion ins, usuario e where ins.codigo_estudiante = e.codigo and ins.codigo_seccion = s.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                salon = "No especificado";
            } else {
                salon = rs.getString("aula");
            }
            
            pstmt = conn.prepareStatement("select sum(monto) from inscritos_seccion ins, usuario u, seccion s, pago p, inscripcion i where p.inscripcion = i.codigo and i.estudiante = u.codigo and i.oferta = s.codigo_oferta and ins.codigo_seccion = s.codigo and ins.codigo_estudiante = u.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            totalIngresos = rs.getInt(1);
            
            Calendar cal = Calendar.getInstance();
            int month = cal.get(Calendar.MONTH) + 1;
            int year = cal.get(Calendar.YEAR);
           
            if (month > 0 && month < 4) {
                periodo = "Enero - Marzo "+year;
            } else if (month > 3 && month < 9) {
                periodo = "Abril - Julio "+year;
            } else {
                periodo = "Septiembre - Diciembre "+year;
            }
            
            System.out.println("ESTE ES EL PERIODO "+periodo);
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        if (!err.isEmpty()){
            return;
        }
 
        //HashMap rr = new HashMap();
        //rr.put("total", Math.ceil((double) rowCount / Integer.parseInt(sr.getParameter("rows"))));
        //rr.put("page", Integer.parseInt(sr.getParameter("page")));
        //rr.put("records", Integer.parseInt(sr.getParameter("rows")));
        //rr.put("rows", m);
 
        //output = new Gson().toJson(r);
        
        // se crea instancia del documento
        Document mipdf = new Document(PageSize.LETTER);
        // se establece una instancia a un documento pdf
        HttpServletResponse r = ServletActionContext.getResponse();
        //String path = "/home/lucia/NetBeansProjects/";
        //System.out.println("EL PATH DE LA IMAGEN ES: " + path);
        r.setContentType("application/pdf");
        r.setHeader("Content-Disposition", " inline; filename=listaSeccion.pdf");
        PdfWriter.getInstance(mipdf, r.getOutputStream());
        mipdf.open(); // se abre el documento
        
        mipdf.addTitle("Lista"); // se añade el titulo                     
        
        Image logo = Image.getInstance(ServletActionContext.getServletContext().getRealPath("/") + "logo.jpg");
        logo.scaleToFit(197, 81);
        logo.setAlignment(Image.ALIGN_LEFT);
        mipdf.add(logo);
                    
        Paragraph blank = new Paragraph("\n");
        
        Font fontEncabezado = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 12);
        fontEncabezado.setStyle(Font.BOLD);
        
        mipdf.add(blank);
        mipdf.add(blank);
        
        Paragraph nombreC = new Paragraph("Idioma: "+nombreCurso, fontEncabezado);
        //nombreC.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(nombreC);
        //mipdf.add(blank);
        //mipdf.add(blank);
        Paragraph h = new Paragraph("Horario: "+horario, fontEncabezado);
        h.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(h);
        //mipdf.add(blank);
        //mipdf.add(blank);
        /* ahora si tablas */           
        //mipdf.add(Tabla_Simple());
        Paragraph trimestre = new Paragraph(periodo, fontEncabezado);
        trimestre.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(trimestre);
        
        Paragraph nombreP = new Paragraph("Profesor: "+nombreProfesor, fontEncabezado);
        nombreP.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(nombreP);
        
        Paragraph s = new Paragraph("Salones: "+salon, fontEncabezado);
        s.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(s);
        
        mipdf.add(blank);
        mipdf.add(blank);
        //---------------------------------------------
        PdfPTable mitablasimple=new PdfPTable(7);
         //añadimos contenido a las celdas
         mitablasimple.addCell("ÍTEM");
         mitablasimple.addCell("PARTICIPANTE");
         mitablasimple.addCell("CÉDULA");
         mitablasimple.addCell("TELÉFONO");
         mitablasimple.addCell("CORREO");
         mitablasimple.addCell("DEPÓSITO");
         mitablasimple.addCell("MONTO");
         
         int numero = 0;
         while (numero != rowCount) {
             mitablasimple.addCell(m[numero][0]);
             mitablasimple.addCell(m[numero][1]);
             mitablasimple.addCell(m[numero][2]);
             mitablasimple.addCell(m[numero][3]);
             mitablasimple.addCell(m[numero][4]);
             if (m[numero][5].equals("Exonerado")) {
                mitablasimple.addCell("Exonerado");
                mitablasimple.addCell("----"); 
             } else {
                 mitablasimple.addCell(m[numero][5]);
                 mitablasimple.addCell(m[numero][6]);
             }
             numero = numero + 1;
         }
         
         mipdf.add(mitablasimple);
        mipdf.add(blank);
        mipdf.add(blank);
        Paragraph totalI = new Paragraph("TOTAL = "+totalIngresos, fontEncabezado);
        totalI.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(totalI);
        mipdf.add(blank);
        mipdf.add(blank);
        //---------------------------------------------
        mipdf.close(); //se cierra el PDF               
        System.out.println("documento pdf creado");
    }
    
    public void generar_certificado() throws DocumentException, FileNotFoundException, IOException {
        
        String nombreCurso = null;
        String nombreEstudiante = null;
        String nombreProfesor = null;
        String hlistarinscritos = (String) ActionContext.getContext().getSession().get("idseccion");
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select u.nombre, u.apellido from usuario u where u.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
            
            pstmt = conn.prepareStatement("select c.nombre, o.dias from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            
            pstmt = conn.prepareStatement("select p.nombre, p.apellido from seccion s, inscritos_seccion ins, usuario e, usuario p where ins.codigo_estudiante = e.codigo and ins.codigo_seccion = s.codigo and s.codigo_prof = p.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                nombreProfesor = "Prof. No Especificado";
            } else {
                nombreProfesor = rs.getString("nombre") + " " + rs.getString("apellido");
            }
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        if (!err.isEmpty()){
            return;
        }

        // se crea instancia del documento
        Document mipdf = new Document(PageSize.LETTER.rotate());
        // se establece una instancia a un documento pdf
        HttpServletResponse r = ServletActionContext.getResponse();
        r.setContentType("application/pdf");
        r.setHeader("Content-Disposition", " inline; filename=certificado.pdf");
        PdfWriter.getInstance(mipdf, r.getOutputStream());
        mipdf.open(); // se abre el documento

        mipdf.addTitle("Certificado"); // se añade el titulo                     
        
        Paragraph blank = new Paragraph("\n");
        

        Font font = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 20);
        Font font2 = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 10);
        Font font3 = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 15);
        Font bold = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 20);
        Font bold2 = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 30);
        bold.setStyle(Font.BOLD);
        bold2.setStyle(Font.BOLD);
        bold2.setColor(BaseColor.BLUE);
        
        Image logo = Image.getInstance(ServletActionContext.getServletContext().getRealPath("/") + "logo.jpg");
        logo.setAlignment(Image.ALIGN_CENTER);
        mipdf.add(logo);
        
        Paragraph f = new Paragraph("CERTIFICADO", font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Se hace constar que", font3);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreEstudiante, font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Aprobó el curso de", font3);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreCurso, font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Con una duración de 45 horas académicas, dictado en esta Casa de Estudios, por el profesor", font3);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreProfesor, font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        Calendar rightNow = Calendar.getInstance();
        switch (rightNow.get(Calendar.MONTH)) {
            case Calendar.JANUARY:
            case Calendar.FEBRUARY:
            case Calendar.MARCH:
                f = new Paragraph("Enero - Marzo " + rightNow.get(Calendar.YEAR), font3);
                break;
            case Calendar.APRIL:
            case Calendar.MAY:
            case Calendar.JUNE:
            case Calendar.JULY:
            case Calendar.AUGUST:
                f = new Paragraph("Abril - Julio " + rightNow.get(Calendar.YEAR), font3);
                break;
            case Calendar.SEPTEMBER:
            case Calendar.OCTOBER:
            case Calendar.NOVEMBER:
            case Calendar.DECEMBER:
                f = new Paragraph("Septiembre - Diciembre " + rightNow.get(Calendar.YEAR), font3);
        }
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        mipdf.add(blank);
        mipdf.add(blank);
        
        f = new Paragraph("Decano de Extensión", font2);
        f.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(f);
        f = new Paragraph("Secretario", font2);
        f.setAlignment(Paragraph.ALIGN_RIGHT);
        mipdf.add(f);
        
        mipdf.close(); //se cierra el PDF
    }
    
    public void generar_certificado_archivo() throws DocumentException, FileNotFoundException, IOException {
        String nombreCurso = null;
        String nombreEstudiante = null;
        String nombreProfesor = null;
        String hlistarinscritos = (String) ActionContext.getContext().getSession().get("idseccion");
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select u.nombre, u.apellido from usuario u where u.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
            
            pstmt = conn.prepareStatement("select c.nombre, o.dias from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            
            pstmt = conn.prepareStatement("select p.nombre, p.apellido from seccion s, inscritos_seccion ins, usuario e, usuario p where ins.codigo_estudiante = e.codigo and ins.codigo_seccion = s.codigo and s.codigo_prof = p.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                nombreProfesor = "Prof. No Especificado";
            } else {
                nombreProfesor = rs.getString("nombre") + " " + rs.getString("apellido");
            }
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        if (!err.isEmpty()){
            return;
        }
        
        generar_certificado_archivo2(nombreEstudiante,nombreCurso,nombreProfesor);
    }
    
    public void generar_certificado_archivo2(String nombreEstudiante, String nombreCurso, String nombreProfesor) throws DocumentException, FileNotFoundException, IOException {
        
        // se crea instancia del documento
        Document mipdf = new Document(PageSize.LETTER.rotate());
        PdfWriter.getInstance(mipdf, new FileOutputStream(ServletActionContext.getServletContext().getRealPath("/") + "certificado.pdf"));
        mipdf.open(); // se abre el documento

        mipdf.addTitle("Certificado"); // se añade el titulo                     
        
        Paragraph blank = new Paragraph("\n");
        

        Font font = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 20);
        Font font2 = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 10);
        Font font3 = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 15);
        Font bold = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 20);
        Font bold2 = FontFactory.getFont("Times New Roman", BaseFont.IDENTITY_H, 30);
        bold.setStyle(Font.BOLD);
        bold2.setStyle(Font.BOLD);
        bold2.setColor(BaseColor.BLUE);
        
        Image logo = Image.getInstance(ServletActionContext.getServletContext().getRealPath("/") + "logo.jpg");
        logo.setAlignment(Image.ALIGN_CENTER);
        mipdf.add(logo);
        
        Paragraph f = new Paragraph("CERTIFICADO", font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Se hace constar que", font3);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreEstudiante, font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Aprobó el curso de", font3);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreCurso, font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Con una duración de 45 horas académicas, dictado en esta Casa de Estudios, por el profesor", font3);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreProfesor, font);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        Calendar rightNow = Calendar.getInstance();
        switch (rightNow.get(Calendar.MONTH)) {
            case Calendar.JANUARY:
            case Calendar.FEBRUARY:
            case Calendar.MARCH:
                f = new Paragraph("Enero - Marzo " + rightNow.get(Calendar.YEAR), font3);
                break;
            case Calendar.APRIL:
            case Calendar.MAY:
            case Calendar.JUNE:
            case Calendar.JULY:
            case Calendar.AUGUST:
                f = new Paragraph("Abril - Julio " + rightNow.get(Calendar.YEAR), font3);
                break;
            case Calendar.SEPTEMBER:
            case Calendar.OCTOBER:
            case Calendar.NOVEMBER:
            case Calendar.DECEMBER:
                f = new Paragraph("Septiembre - Diciembre " + rightNow.get(Calendar.YEAR), font3);
        }
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        mipdf.add(blank);
        mipdf.add(blank);
        
        f = new Paragraph("Decano de Extensión", font2);
        f.setAlignment(Paragraph.ALIGN_LEFT);
        mipdf.add(f);
        f = new Paragraph("Secretario", font2);
        f.setAlignment(Paragraph.ALIGN_RIGHT);
        mipdf.add(f);
        
        mipdf.close(); //se cierra el PDF
    }
    
    public void generar_constancia() throws DocumentException, FileNotFoundException, IOException {
        
        String nombreCurso = null;
        String nombreEstudiante = null;
        String cedulaEstudiante = null;
        String hlistarinscritos = (String) ActionContext.getContext().getSession().get("idseccion");
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select u.nombre, u.apellido, u.cedula from usuario u where u.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
            cedulaEstudiante = rs.getString("cedula");
            
            pstmt = conn.prepareStatement("select c.nombre, o.dias from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        if (!err.isEmpty()){
            return;
        }

        // se crea instancia del documento
        Document mipdf = new Document(PageSize.LETTER.rotate());
        // se establece una instancia a un documento pdf
        HttpServletResponse r = ServletActionContext.getResponse();
        r.setContentType("application/pdf");
        r.setHeader("Content-Disposition", " inline; filename=constancia.pdf");
        PdfWriter.getInstance(mipdf, r.getOutputStream());
        mipdf.open(); // se abre el documento

        mipdf.addTitle("Constancia"); // se añade el titulo                     
        
        Paragraph blank = new Paragraph("\n");
        

        Font font = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 20);
        Font font2 = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 12);
        Font bold = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 20);
        Font bold2 = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 30);
        bold.setStyle(Font.BOLDITALIC);
        bold2.setStyle(Font.BOLD);
        bold2.setColor(BaseColor.BLUE);
        
        Image logo = Image.getInstance(ServletActionContext.getServletContext().getRealPath("/") + "logo.jpg");
        logo.setAlignment(Image.ALIGN_CENTER);
        mipdf.add(logo);
        
        Paragraph f = new Paragraph("CONSTANCIA", bold);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Por medio de la presente se hace constar que el ciudadano " + nombreEstudiante + ", portador de la cédula de identidad número " + cedulaEstudiante + ", cursó y aprobó el siguiente nivel de nuestros cursos de idiomas:", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreCurso + "   Enero - Marzo 2012", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Con 45 horas académicas, este curso es programado por la Coordinación de Educación Permanente del Decanato de Extensión de la Universidad Simón Bolívar.", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        String mes = null;
        Calendar rightNow = Calendar.getInstance();
        switch (rightNow.get(Calendar.MONTH)) {
            case Calendar.JANUARY:
                mes = "Enero";
                break;
            case Calendar.FEBRUARY:
                mes = "Febrero";
                break;
            case Calendar.MARCH:
                mes = "Marzo";
                break;
            case Calendar.APRIL:
                mes = "Abril";
                break;
            case Calendar.MAY:
                mes = "Mayo";
                break;
            case Calendar.JUNE:
                mes = "Junio";
                break;
            case Calendar.JULY:
                mes = "Julio";
                break;
            case Calendar.AUGUST:
                mes = "Agosto";
                break;
            case Calendar.SEPTEMBER:
                mes = "Septiembre";
                break;
            case Calendar.OCTOBER:
                mes = "Octubre";
                break;
            case Calendar.NOVEMBER:
                mes = "Noviembre";
                break;
            case Calendar.DECEMBER:
                mes = "Diciembre";
        }
        
        f = new Paragraph("Constancia que se expide a petición de la parte interesada a los " + rightNow.get(Calendar.DAY_OF_MONTH) + " días del mes de " + mes + " de " + rightNow.get(Calendar.YEAR) + ".", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        mipdf.add(blank);
        
        f = new Paragraph("Atentamente,", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        mipdf.add(blank);
        mipdf.add(blank);
        
        f = new Paragraph("Yelitza Gesset Anselmi\nCoordinación de Educación Permanente\nTeléfono: 906.3157 (ext 6808)", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        
        mipdf.close(); //se cierra el PDF
    }
    
    public void generar_constancia_archivo() throws DocumentException, FileNotFoundException, IOException {
        String nombreCurso = null;
        String nombreEstudiante = null;
        String cedulaEstudiante = null;
        String hlistarinscritos = (String) ActionContext.getContext().getSession().get("idseccion");
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select u.nombre, u.apellido, u.cedula from usuario u where u.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
            cedulaEstudiante = rs.getString("cedula");
            
            pstmt = conn.prepareStatement("select c.nombre, o.dias from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(hlistarinscritos));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        if (!err.isEmpty()){
            return;
        }
        
        generar_constancia_archivo2(nombreEstudiante,cedulaEstudiante,nombreCurso);
    }
    
    public void generar_constancia_archivo2(String nombreEstudiante, String cedulaEstudiante, String nombreCurso) throws DocumentException, FileNotFoundException, IOException {
        
        // se crea instancia del documento
        Document mipdf = new Document(PageSize.LETTER.rotate());
        PdfWriter.getInstance(mipdf, new FileOutputStream(ServletActionContext.getServletContext().getRealPath("/") + "constancia.pdf"));
        mipdf.open(); // se abre el documento

        mipdf.addTitle("Constancia"); // se añade el titulo                     
        
        Paragraph blank = new Paragraph("\n");
        

        Font font = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 20);
        Font font2 = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 12);
        Font bold = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 20);
        Font bold2 = FontFactory.getFont("Georgia", BaseFont.IDENTITY_H, 30);
        bold.setStyle(Font.BOLDITALIC);
        bold2.setStyle(Font.BOLD);
        bold2.setColor(BaseColor.BLUE);
        
        Image logo = Image.getInstance(ServletActionContext.getServletContext().getRealPath("/") + "logo.jpg");
        logo.setAlignment(Image.ALIGN_CENTER);
        mipdf.add(logo);
        
        Paragraph f = new Paragraph("CONSTANCIA", bold);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Por medio de la presente se hace constar que el ciudadano " + nombreEstudiante + ", portador de la cédula de identidad número " + cedulaEstudiante + ", cursó y aprobó el siguiente nivel de nuestros cursos de idiomas:", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph(nombreCurso + "   Enero - Marzo 2012", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        f = new Paragraph("Con 45 horas académicas, este curso es programado por la Coordinación de Educación Permanente del Decanato de Extensión de la Universidad Simón Bolívar.", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        
        String mes = null;
        Calendar rightNow = Calendar.getInstance();
        switch (rightNow.get(Calendar.MONTH)) {
            case Calendar.JANUARY:
                mes = "Enero";
                break;
            case Calendar.FEBRUARY:
                mes = "Febrero";
                break;
            case Calendar.MARCH:
                mes = "Marzo";
                break;
            case Calendar.APRIL:
                mes = "Abril";
                break;
            case Calendar.MAY:
                mes = "Mayo";
                break;
            case Calendar.JUNE:
                mes = "Junio";
                break;
            case Calendar.JULY:
                mes = "Julio";
                break;
            case Calendar.AUGUST:
                mes = "Agosto";
                break;
            case Calendar.SEPTEMBER:
                mes = "Septiembre";
                break;
            case Calendar.OCTOBER:
                mes = "Octubre";
                break;
            case Calendar.NOVEMBER:
                mes = "Noviembre";
                break;
            case Calendar.DECEMBER:
                mes = "Diciembre";
        }
        
        f = new Paragraph("Constancia que se expide a petición de la parte interesada a los " + rightNow.get(Calendar.DAY_OF_MONTH) + " días del mes de " + mes + " de " + rightNow.get(Calendar.YEAR) + ".", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        mipdf.add(blank);
        
        f = new Paragraph("Atentamente,", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        mipdf.add(blank);
        mipdf.add(blank);
        mipdf.add(blank);
        
        f = new Paragraph("Yelitza Gesset Anselmi\nCoordinación de Educación Permanente\nTeléfono: 906.3157 (ext 6808)", font2);
        f.setAlignment(Paragraph.ALIGN_CENTER);
        mipdf.add(f);
        
        mipdf.close(); //se cierra el PDF
    }
    
    public String enviar_certificado() {
        
        String correo = null;
        String nombreEstudiante = null;
        String aprobado = null;
        
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select nombre, apellido, correo from usuario u where u.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
            correo = rs.getString("correo");
            
            pstmt = conn.prepareStatement("select aprobado from inscritos_seccion where codigo_seccion = ? and codigo_estudiante = ?");
            pstmt.setInt(1,Integer.parseInt((String) ActionContext.getContext().getSession().get("idseccion")));
            pstmt.setInt(2,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            aprobado = rs.getString(1);
            
            if (aprobado.equals("NO")) {
                return "error2";
            }
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        
        try {
        
                Properties props = new Properties();
                props.put("mail.smtp.host", "smtp.gmail.com");
                props.put("mail.smtp.socketFactory.port", "465");
                props.put("mail.smtp.socketFactory.class",
                                "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", "465");

                javax.mail.Session session = javax.mail.Session.getInstance(props,
                        new javax.mail.Authenticator() {
                                protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication("coordedp@gmail.com","coordEDPcoord");
                                }
                        });


                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("coordedp@gmail.com"));
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(correo));
                message.setSubject("Certificado");
                
                Multipart multipart = new MimeMultipart();
                MimeBodyPart messageBodyPart = new MimeBodyPart();
                
                messageBodyPart.setText("Buen día " + nombreEstudiante + ", se adjunta certificado.\n\nSaludos.\n\nAtentamente,\n\nCoordinación de Educación Permanente");
                multipart.addBodyPart(messageBodyPart);
                
                messageBodyPart = new MimeBodyPart();
                generar_certificado_archivo();
                DataSource source = new FileDataSource(ServletActionContext.getServletContext().getRealPath("/") + "certificado.pdf");
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName("certificado.pdf");
                multipart.addBodyPart(messageBodyPart);

                message.setContent(multipart);

                Transport.send(message);
                
                (new File(ServletActionContext.getServletContext().getRealPath("/") + "certificado.pdf")).delete();
                
                return SUCCESS;
        } catch (MessagingException e) {
            return ERROR;
        } catch (Exception e) {
            return ERROR;
        }
    }
    
    public String enviar_constancia() {
        
        String correo = null;
        String nombreEstudiante = null;
        String aprobado = null;
        
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select nombre, apellido, correo from usuario u where u.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
            correo = rs.getString("correo");
            
            pstmt = conn.prepareStatement("select aprobado from inscritos_seccion where codigo_seccion = ? and codigo_estudiante = ?");
            pstmt.setInt(1,Integer.parseInt((String) ActionContext.getContext().getSession().get("idseccion")));
            pstmt.setInt(2,Integer.parseInt(estudianteSeleccionado));
            rs = pstmt.executeQuery();
            rs.next();
            aprobado = rs.getString(1);
            
            if (aprobado.equals("NO")) {
                return "error2";
            }
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        
        try {
        
                Properties props = new Properties();
                props.put("mail.smtp.host", "smtp.gmail.com");
                props.put("mail.smtp.socketFactory.port", "465");
                props.put("mail.smtp.socketFactory.class",
                                "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", "465");

                javax.mail.Session session = javax.mail.Session.getInstance(props,
                        new javax.mail.Authenticator() {
                                protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication("coordedp@gmail.com","coordEDPcoord");
                                }
                        });


                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("coordedp@gmail.com"));
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(correo));
                message.setSubject("Constancia");
                
                Multipart multipart = new MimeMultipart();
                MimeBodyPart messageBodyPart = new MimeBodyPart();
                
                messageBodyPart.setText("Buen día " + nombreEstudiante + ", se adjunta constancia.\n\nSaludos.\n\nAtentamente,\n\nCoordinación de Educación Permanente");
                multipart.addBodyPart(messageBodyPart);
                
                messageBodyPart = new MimeBodyPart();
                generar_constancia_archivo();
                DataSource source = new FileDataSource(ServletActionContext.getServletContext().getRealPath("/") + "constancia.pdf");
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName("constancia.pdf");
                multipart.addBodyPart(messageBodyPart);

                message.setContent(multipart);

                Transport.send(message);
                
                (new File(ServletActionContext.getServletContext().getRealPath("/") + "constancia.pdf")).delete();
                
                return SUCCESS;
        } catch (MessagingException e) {
                return ERROR;
        } catch (Exception e) {
            return ERROR;
        }
    }
    
   public String enviar_certificados_todos() {
        
        String correo = null;
        String nombreEstudiante = null;
        String nombreCurso = null;
        String nombreProfesor = null;
        
        ResultSet rs = null;
        
        try{
            Connection conn = Session.connection();
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select aprobado from inscritos_seccion where aprobado = 'SI' and codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt((String) ActionContext.getContext().getSession().get("idseccion")));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                return "error2";
            }
            
            pstmt = conn.prepareStatement("select c.nombre from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(seccionCertificados));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            
            pstmt = conn.prepareStatement("select p.nombre, p.apellido from seccion s, inscritos_seccion ins, usuario e, usuario p where ins.codigo_estudiante = e.codigo and ins.codigo_seccion = s.codigo and s.codigo_prof = p.codigo and ins.codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt(seccionCertificados));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                nombreProfesor = "Prof. No Especificado";
            } else {
                nombreProfesor = rs.getString("nombre") + " " + rs.getString("apellido");
            }
            
            pstmt = conn.prepareStatement("select nombre, apellido, correo from usuario u, inscritos_seccion i, seccion s where i.aprobado = 'SI' and u.codigo = i.codigo_estudiante and i.codigo_seccion = s.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(seccionCertificados));
            rs = pstmt.executeQuery();
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        
        try {
        
                Properties props = new Properties();
                props.put("mail.smtp.host", "smtp.gmail.com");
                props.put("mail.smtp.socketFactory.port", "465");
                props.put("mail.smtp.socketFactory.class",
                                "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", "465");

                javax.mail.Session session = javax.mail.Session.getInstance(props,
                        new javax.mail.Authenticator() {
                                protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication("coordedp@gmail.com","coordEDPcoord");
                                }
                        });

                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("coordedp@gmail.com"));
                message.setSubject("Certificado");
                
                while (rs.next()) {
                    nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
                    correo = rs.getString("correo");
                    
                    System.out.println("AAAAAAAAAAAA " + nombreEstudiante + " " + correo);
                    
                    message.setRecipient(Message.RecipientType.TO, new InternetAddress(correo));

                    Multipart multipart = new MimeMultipart();
                    MimeBodyPart messageBodyPart = new MimeBodyPart();

                    messageBodyPart.setText("Buen día " + nombreEstudiante + ", se adjunta certificado.\n\nSaludos.\n\nAtentamente,\n\nCoordinación de Educación Permanente");
                    multipart.addBodyPart(messageBodyPart);

                    messageBodyPart = new MimeBodyPart();
                    generar_certificado_archivo2(nombreEstudiante,nombreCurso,nombreProfesor);
                    DataSource source = new FileDataSource(ServletActionContext.getServletContext().getRealPath("/") + "certificado.pdf");
                    messageBodyPart.setDataHandler(new DataHandler(source));
                    messageBodyPart.setFileName("certificado.pdf");
                    multipart.addBodyPart(messageBodyPart);

                    message.setContent(multipart);

                    Transport.send(message);

                    (new File(ServletActionContext.getServletContext().getRealPath("/") + "certificado.pdf")).delete();
                }
                return SUCCESS;
        } catch (MessagingException e) {
            return ERROR;
        } catch (Exception e) {
            return ERROR;
        }
    }
   
   public String enviar_constancias_todos() {
        
        String correo = null;
        String nombreEstudiante = null;
        String cedulaEstudiante = null;
        String nombreCurso = null;
        
        ResultSet rs = null;
        
        try{
            Connection conn = Session.connection();
            PreparedStatement pstmt;
            
            pstmt = conn.prepareStatement("select aprobado from inscritos_seccion where aprobado = 'SI' and codigo_seccion = ?");
            pstmt.setInt(1,Integer.parseInt((String) ActionContext.getContext().getSession().get("idseccion")));
            rs = pstmt.executeQuery();
            if (!rs.next()) {
                return "error2";
            }
            
            pstmt = conn.prepareStatement("select c.nombre from seccion s, oferta o, curso c where s.codigo_oferta = o.codigo and o.curso = c.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(seccionConstancias));
            rs = pstmt.executeQuery();
            rs.next();
            nombreCurso = rs.getString("nombre");
            
            pstmt = conn.prepareStatement("select nombre, apellido, cedula, correo from usuario u, inscritos_seccion i, seccion s where i.aprobado = 'SI' and u.codigo = i.codigo_estudiante and i.codigo_seccion = s.codigo and s.codigo = ?");
            pstmt.setInt(1,Integer.parseInt(seccionConstancias));
            rs = pstmt.executeQuery();
            
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        
        try {
        
                Properties props = new Properties();
                props.put("mail.smtp.host", "smtp.gmail.com");
                props.put("mail.smtp.socketFactory.port", "465");
                props.put("mail.smtp.socketFactory.class",
                                "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", "465");

                javax.mail.Session session = javax.mail.Session.getInstance(props,
                        new javax.mail.Authenticator() {
                                protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication("coordedp@gmail.com","coordEDPcoord");
                                }
                        });

                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("coordedp@gmail.com"));
                message.setSubject("Constancia");
                
                while (rs.next()) {
                    nombreEstudiante = rs.getString("nombre") + " " + rs.getString("apellido");
                    cedulaEstudiante = rs.getString("cedula");
                    correo = rs.getString("correo");
                   
                    message.setRecipient(Message.RecipientType.TO, new InternetAddress(correo));
                    
                    Multipart multipart = new MimeMultipart();
                    MimeBodyPart messageBodyPart = new MimeBodyPart();

                    messageBodyPart.setText("Buen día " + nombreEstudiante + ", se adjunta constancia.\n\nSaludos.\n\nAtentamente,\n\nCoordinación de Educación Permanente");
                    multipart.addBodyPart(messageBodyPart);

                    messageBodyPart = new MimeBodyPart();
                    generar_constancia_archivo2(nombreEstudiante,cedulaEstudiante,nombreCurso);
                    DataSource source = new FileDataSource(ServletActionContext.getServletContext().getRealPath("/") + "constancia.pdf");
                    messageBodyPart.setDataHandler(new DataHandler(source));
                    messageBodyPart.setFileName("constancia.pdf");
                    multipart.addBodyPart(messageBodyPart);

                    message.setContent(multipart);

                    Transport.send(message);

                    (new File(ServletActionContext.getServletContext().getRealPath("/") + "constancia.pdf")).delete();
                }
                return SUCCESS;
        } catch (MessagingException e) {
            return ERROR;
        } catch (Exception e) {
            return ERROR;
        }
    }
   
   public String getIdoferta(){
       return idoferta;
   }
   public void setIdoferta(String idoferta){
       this.idoferta = idoferta;
   }

    public String crear(){

        /*if (!"Administrador".equals(user().getRol())){
            err.put("error", "debe ser administrador para crear cursos");
            return _finish();
        }*/

        return editar();
    }

    public String editar(){

        /*if (!"Administrador".equals(user().getRol())){
            err.put("error", "debe ser administrador para editar cursos");
            return _finish();
        }*/
        System.out.println("SI ESTA LLAMANDO A EDITAR");
        try{
            _createDomainObject();
            if (!err.isEmpty()){
                return _finish();
            }
        }catch(SeccionException e){
             System.out.println("SI SE METE EN EL CATCH");
            return _finishWithExceptions(e);
        }
        return _finish();
    }
	/*
    public String listar(){
        SeccionModel p = new SeccionModel();
        SelectObject s;
        ArrayList<Seccion> secciones;
        int rowCount;
        try{
            s = _createSearchObject();
            if (!err.isEmpty()){
                return _finish();
            }
            p = new SeccionModel();
            secciones = p.getCustom(s);
            rowCount = p.getRowCount();
        }catch (SeccionException e){
            return _finishWithExceptions(e);
        }
        if (!err.isEmpty()){
            return _finish();
        }

        HashMap[] m = new HashMap[secciones.size()];
        int i = 0;

        for (Seccion o : secciones){
            String[] c = new String[5];
            c[0] = Integer.toString(o.getNumero());
            c[1] = Short.toString(o.getMaxEstudiantes());
            c[2] = Integer.toString(o.getCodigoOferta());
            c[3] = Integer.toString(o.getCodigoProf());
            c[4] = o.getAula();
            HashMap e = new HashMap();
            e.put("id", o.getCodigo());
            e.put("cell", c);
            m[i] = e;

            ++ i;
        }
		
        HashMap r = new HashMap();
        r.put("total", Math.ceil((double) rowCount / (double) s.getRows()));
        r.put("page", s.getPage());
        r.put("records", s.getRows());
        r.put("rows", m);
 
        output = new Gson().toJson(r);

        return SUCCESS;
    }
    */
    public String listar(){
        int rowCount = 0;
        HttpServletRequest sr = ServletActionContext.getRequest();
        HashMap[] m = null;
        int i = 0;
        idoferta = (String) ActionContext.getContext().getSession().get("idoferta");
        try{
            Connection conn = Session.connection();
            ResultSet rs;
            PreparedStatement pstmt;
		
            pstmt = conn.prepareStatement("select count(*) from seccion where codigo_oferta = ?");
            pstmt.setInt(1,Integer.parseInt(idoferta));
            rs = pstmt.executeQuery();
            rs.next();
            rowCount = rs.getInt(1);
            
            pstmt = conn.prepareStatement("select * from seccion where codigo_oferta = ?");
            pstmt.setInt(1,Integer.parseInt(idoferta));
            rs = pstmt.executeQuery();
            
            m = new HashMap[rowCount];
            
            while (rs.next()){
                String[] c = new String[5];
                c[0] = rs.getString("numero");
                c[1] = rs.getString("max_estudiantes");
                c[2] = rs.getString("codigo_oferta");
                c[3] = rs.getString("codigo_prof");
                c[4] = rs.getString("aula");
                HashMap e = new HashMap();
                e.put("id", rs.getInt("codigo"));
                e.put("cell", c);
                m[i] = e;

                ++ i;
            }
        } catch(java.sql.SQLException e){
            e.printStackTrace();
        }
        if (!err.isEmpty()){
            return _finish();
        }

        HashMap r = new HashMap();
        r.put("total", Math.ceil((double) rowCount / Integer.parseInt(sr.getParameter("rows"))));
        r.put("page", Integer.parseInt(sr.getParameter("page")));
        r.put("records", Integer.parseInt(sr.getParameter("rows")));
        r.put("rows", m);
 
        output = new Gson().toJson(r);

        return SUCCESS;
    }

    /*public String eliminar(){

        HttpServletRequest r = ServletActionContext.getRequest();
        int codigo = 0;
        try{
            codigo = Integer.parseInt(r.getParameter("id"));
        }catch(java.lang.NumberFormatException e){
            err.put("Código", "El registro con el número '" + r.getParameter("id") + "' no existe.");
        }

        try{
            sqlWhere w = new sqlWhere();
            sqlWhere.rule[] c = new sqlWhere.rule[1];
            c[0] = w.new rule();
            c[0].setField("curso");
            c[0].setOp("eq");
            c[0].setData(Integer.toString(codigo));
            w.setRules(c);
            ArrayList<Oferta> ol = new OfertaModel().getCustom(
                new SelectObject((short) 1, (short) 1, "", "", w)
            );
            if (0 < ol.size()){
                Oferta o = ol.get(0);
                err.put("error", "La oferta (" + o.getAno() + ", " + o.getPeriodo() +
                        ", " + o.getDias() + ") aun existe para este curso.");
            }
        }catch(OfertaException e){
            //Si no se pudo validar y existía el registro, más abajo va a dar el error feo
            e.printStackTrace();
        }

        if (!err.isEmpty()){
            return _finish();
        }

        try{
            new CursoModel().delete(codigo);
            return _finish();
        }catch (CursoException e){
            return _finishWithExceptions(e);
        }
    }*/

    protected int _createDomainObject()
        throws SeccionException
    {

        HttpServletRequest r = ServletActionContext.getRequest();
        System.out.println("SI PASA EL REQUEST");
        /*int codigo = -1;
        if ("_empty".equals(r.getParameter("id"))){
            codigo = 0;
        }else{
            try{
                codigo = Integer.parseInt(r.getParameter("id"));
            }catch(java.lang.NumberFormatException e){
                err.put("Codigo", "Número de registro inválido");
            }
        }

        int numero = -1;
        try{
            numero = Integer.parseInt(r.getParameter("numero"));
            if (numero < 0){
                err.put("Numero", "El numero no puede ser negativo");
            }
        }catch(java.lang.NumberFormatException e){
            err.put("Numero", "Numero inválido");
        }

        short maxEstudiantes = -1;
        try{
            maxEstudiantes = (short) Integer.parseInt(r.getParameter("max_estudiantes"));
            if (maxEstudiantes < 0){
                err.put("Maximo de estudiantes", "El maximo de estudiantes no puede ser negativo");
            }
        }catch(java.lang.NumberFormatException e){
            err.put("Maximo", "Maximo de estudiantes inválido");
        }*/
        int codigo = Integer.parseInt(r.getParameter("id"));
        System.out.println("EL CODIGO ES -->"+codigo);
        try {
            String max = r.getParameter("max_estudiantes");
            if (max != null) {
                try {
                    short maxEstudiantes = (short) Integer.parseInt(max);
                    if (maxEstudiantes <= 0) {
                        err.put("Máximo de Estudiantes", "Debe introducir un número entero mayor que 0."); 
                        return 0;
                    }
                    System.out.println("EL MAX ES -->"+maxEstudiantes);
                    Connection conn = Session.connection();
                    PreparedStatement pstmt = conn.prepareStatement("UPDATE seccion " +
                      "SET max_estudiantes=?" +
                      " WHERE codigo=?");

                    pstmt.setShort(1, maxEstudiantes);
                    pstmt.setInt(2, codigo);
                    pstmt.executeUpdate();
                } catch (java.lang.NumberFormatException e){
                    err.put("Máximo de Estudiantes", "Debe introducir un número entero.");  
                }
                return 0;
            }
        } catch (Exception e) {
                  
        } 
        try {
            int codigoProf = Integer.parseInt(r.getParameter("codigo_prof"));
            System.out.println("EL CODIGO DEL PROFESOR ES -->"+codigoProf);
            Connection conn = Session.connection();
            PreparedStatement pstmt;
            ResultSet rs;
            try {
                pstmt = conn.prepareStatement("select * from oferta where codigo IN (select codigo_oferta from seccion where codigo = ?)");
                pstmt.setInt(1,codigo);
                rs = pstmt.executeQuery();
                rs.next();
                String dias = rs.getString("dias");
                System.out.println("EL HORARIO DE LA SECCION ES: "+dias);
                pstmt = conn.prepareStatement("select * from seccion where codigo <> ? and codigo_prof = ? and codigo_oferta IN (select codigo from oferta where dias IN (select dias from oferta where codigo IN (select codigo_oferta from seccion where codigo = ?)))");
                pstmt.setInt(1,codigo);
                pstmt.setInt(2,codigoProf);
                pstmt.setInt(3,codigo);
                rs = pstmt.executeQuery();
                if (rs.next()) {
                    System.out.println("El profesor indicado no puede ser asignado a la sección, ya que durante el horario "+dias+" atiende a otra sección.");
                    err.put("Profesor", "El profesor indicado no puede ser asignado a la sección, ya que durante el horario "+dias+" atiende a otra sección.");
                } else {
                    try {
                        pstmt = conn.prepareStatement("UPDATE seccion " +
                          "SET codigo_prof=?" +
                          " WHERE codigo=?");
                        pstmt.setInt(1, codigoProf);
                        pstmt.setInt(2, codigo);
                        pstmt.executeUpdate();
                        System.out.println("HIZO EL UPDATE!!!!!");
                    } catch(java.sql.SQLException e){
                        e.printStackTrace();
                    }
                }
            } catch (SQLException ex) {
                Logger.getLogger(CursoA.class.getName()).log(Level.SEVERE, null, ex);
            }
            return 0;
        } catch (Exception e) {
                  
        }
        try {
            String aul = r.getParameter("aula");
            System.out.println("EL AULA ES -->"+aul);
            Connection conn = Session.connection();
            PreparedStatement pstmt;
            ResultSet rs;
            try {
                pstmt = conn.prepareStatement("select * from oferta where codigo IN (select codigo_oferta from seccion where codigo = ?)");
                pstmt.setInt(1,codigo);
                rs = pstmt.executeQuery();
                rs.next();
                String dias = rs.getString("dias");
                pstmt = conn.prepareStatement("select * from seccion where codigo <> ? and aula = ? and codigo_oferta IN (select codigo from oferta where dias IN (select dias from oferta where codigo IN (select codigo_oferta from seccion where codigo = ?)))");
                pstmt.setInt(1,codigo);
                pstmt.setString(2,aul);
                pstmt.setInt(3,codigo);
                rs = pstmt.executeQuery();
                if (rs.next()) {
                    System.out.println("El aula indicada no puede ser asignada a la sección, ya que durante el horario "+dias+" está ocupada.");
                    err.put("Aula", "El aula indicada no puede ser asignada a la sección, ya que durante el horario "+dias+" está ocupada.");
                } else {
                    try {
                        pstmt = conn.prepareStatement("UPDATE seccion " +
                          "SET aula=?" +
                          " WHERE codigo=?");

                        pstmt.setString(1, aul);
                        pstmt.setInt(2, codigo);
                        pstmt.executeUpdate();
                        System.out.println("HIZO EL UPDATE!!!!!");
                    } catch(java.sql.SQLException e){
                        e.printStackTrace();
                    }
                }
            } catch (SQLException ex) {
                Logger.getLogger(CursoA.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (Exception e) {
                  
        }
        return 0;
      /*  
        int codigoOferta = Integer.parseInt(r.getParameter("codigo_oferta"));
        System.out.println("EL CODIGO DE LA OFERTA ES -->"+codigoOferta);
        int num = Integer.parseInt(r.getParameter("numero"));
        System.out.println("EL NUMERO ES -->"+num);
        */
    }

    protected SelectObject _createSearchObject(){

        HttpServletRequest r = ServletActionContext.getRequest();
        sqlWhere w = (sqlWhere) new Gson().fromJson(
                r.getParameter("filters"), sqlWhere.class);
        if (null == w){
            w = new sqlWhere();
        }
        
        /*sqlWhere.rule[] regla = new sqlWhere.rule[1];
		regla[0] = w.new rule();
        regla[0].setField("codigo_oferta");
        regla[0].setOp("eq");
        regla[0].setData(idoferta);
        w.setRules(regla);*/

        short rows = 20, page = 1;
        try{
            rows = (short) Integer.parseInt(r.getParameter("rows"));
            page = (short) Integer.parseInt(r.getParameter("page"));
        }catch(java.lang.NumberFormatException e){
            
        }
        return new SelectObject(
            rows,
            page,
            r.getParameter("sidx"),
            r.getParameter("sord"),
            w
        );
    }

    protected String _finishWithExceptions(Exception e){
        ServletActionContext.getResponse()
                .setStatus(HttpServletResponse.SC_BAD_REQUEST);

        //Para los casos en los que el error sea interno, err estará vacío.
        if (null != e){
            e.printStackTrace();
            err.put("error interno", e.getMessage());
            output = new Gson().toJson(err);
        }
        return ERROR;
    }

    protected String _finish(){
        if (!err.isEmpty()){
            ServletActionContext.getResponse()
                .setStatus(HttpServletResponse.SC_BAD_REQUEST);
            output = new Gson().toJson(err);
            return ERROR;
        }

        return SUCCESS;
    }

    /*public String autocomplete(){

        HttpServletRequest r = ServletActionContext.getRequest();
        sqlWhere w = new sqlWhere();
        sqlWhere.rule[] c = new sqlWhere.rule[1];
        c[0] = w.new rule();
        c[0].setField("nombre");
        c[0].setOp("cn");
        c[0].setData(r.getParameter("q"));
        w.setRules(c);
        
        ArrayList<Curso> cursos;
        try{
            cursos = new CursoModel().getCustom(new SelectObject(
                    (short) Integer.parseInt(r.getParameter("limit")),
                    (short) 1,
                    "nombre",
                    "asc",
                    w
            ));
        }catch (CursoException e){
            ServletActionContext.getResponse()
                    .setStatus(HttpServletResponse.SC_BAD_REQUEST);
            e.printStackTrace();
            output = "hubo un error: " + e.getMessage();
            return ERROR;
        }

        String[] outputArr = new String[cursos.size()];
        int i = 0;
        for (Curso cur : cursos){
            outputArr[i] = cur.getNombre();
            ++ i;
        }
        output = StringUtils.join(outputArr, "\n");

        return SUCCESS;
    }*/

    protected Usuario user(){

        Usuario u = (Usuario) ActionContext.getContext().getSession().get("user");
        if (null == u){
            u = new Usuario(0, "", "", "", 0, "Visitante", "", "", "", "");
        }
        return u;
    }
    
   public String getEstudianteSeleccionado(){
       return estudianteSeleccionado;
   }
   public void setEstudianteSeleccionado(String estudianteSeleccionado){
       this.estudianteSeleccionado = estudianteSeleccionado;
   }
   
   public String getSeccionCertificados(){
       return seccionCertificados;
   }
   public void setSeccionCertificados(String seccionCertificados){
       this.seccionCertificados = seccionCertificados;
   }

   public String getSeccionConstancias(){
       return seccionConstancias;
   }
   public void setSeccionConstancias(String seccionConstancias){
       this.seccionConstancias = seccionConstancias;
   }

    public String getOutput(){
        return output;
    }

    public String getError(){
        return error;
    }
}
